/**
 * 20. 有效的括号
 *
 * 【简单】
 *
 * 给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
 * 有效字符串需满足：
 *  1.左括号必须用相同类型的右括号闭合。
 *  2.左括号必须以正确的顺序闭合。
 *  3.每个右括号都有一个对应的相同类型的左括号。
 *
 * 示例 1：
 * 输入：s = "()"
 * 输出：true
 *
 * 示例 2：
 * 输入：s = "()[]{}"
 * 输出：true
 *
 * 示例 3：
 * 输入：s = "(]"
 * 输出：false
 *
 */

function isValid(s: string): boolean {
	if (s.length % 2 !== 0 || '({['.includes(s[0])) {
		return false
	}

	const map = {
		'[': ']',
		'{': '}',
		'(': ')'
	}
	const stack: Array<string> = []
	for (let i = 0; i < s.length; i++) {
		if ('({['.includes(s[i])) {
			stack.push(s[i])
		} else if (s[i] !== map[stack.pop()!]) {
			return false
		}
	}

	return stack.length === 0
}
